Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

您所在的位置:网站首页 makefile lib漏字母 Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

2023-10-05 04:09| 来源: 网络整理| 查看: 265

在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝)      https://weidongshan.tmall.com/(天猫) 交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载) 交流群二:QQ群:536785813(单片机-嵌入式) 公 众 号:百问科技

版本日期作者说明V12020韦东山技术文档

在 Linux 中使用 make 命令来编译程序,特别是大程序;而 make 命令所执行的动作依赖于 Makefile 文件。最简单的 Makefile 文件如下:

hello: hello.c gcc -o hello hello.c clean: rm -f hello

将上述 4 行存为 Makefile 文件(注意必须以 Tab 键缩进第 2、4 行,不能以空格键缩进),放入 01_hello目录下,然后直接执行 make 命令即可编译程序,执行“make clean”即可清除编译出来的结果。

make 命令根据文件更新的时间戳来决定哪些文件需要重新编译,这使得可以避免编译已经编译过的、没有变化的程序,可以大大提高编译效率。

要想完整地了解 Makefile 的规则,请参考《GNU Make 使用手册》,以下仅粗略介绍。

3.1 配套视频内容大纲 3.1.1 Makefile 规则与示例

参考文档:gunmake.htm

① 为什么需要 Makefile 怎么高效地编译程序? 想达到什么样的效果?请参考 Visual Studio:修改源文件或头文件,只需要重新编译牵涉到的文件, 就可以重新生成 APP

② Makefile 其实挺简单 一个简单的 Makefile 文件包含一系列的“规则”,其样式如下:

目标(target)…: 依赖(prerequiries)… 命令(command)

如果“依赖文件”比“目标文件”更加新,那么执行“命令”来重新生成“目标文件”。命令被执行的 2 个条件:依赖文件比目标文件新,或是 目标文件还没生成。

③ 先介绍 Makefile 的 2 个函数 A. $(foreach var,list,text) 简单地说,就是 for each var in list, change it to text。 对 list 中的每一个元素,取出来赋给 var,然后把 var 改为 text 所描述的形式。

例子:

objs := a.o b.o dep_files := $(foreach f, $(objs), .$(f).d) // 最终 dep_files := .a.o.d .b.o.d

B. $(wildcard pattern) pattern 所列出的文件是否存在,把存在的文件都列出来。 例子:

src_files := $( wildcard *.c) // 最终 src_files 中列出了当前目录下的所有.c` 文件

④ 一步一步完善 Makefile 第 1 个 Makefile,简单粗暴,效率低:

test : main.c sub.c sub.h gcc -o test main.c sub.c

第 2 个 Makefile,效率高,相似规则太多太啰嗦,不支持检测头文件:

test : main.o sub.o gcc -o test main.o sub.o main.o : main.c gcc -c -o main.o main.c sub.o : sub.c gcc -c -o sub.o sub.c clean: rm *.o test -f

第 3 个 Makefile,效率高,精炼,不支持检测头文件:

test : main.o sub.o gcc -o test main.o sub.o %.o : %.c gcc -c -o $@ $


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3